String.prototype.format = function(inputFormat,outputFormat){
    //1.声明一个数组，存放时间的各个部分的占位符
    const timeParts = [];
    //2.把输入的格式，是一个字符串，转化成一个正则表达式
    //并且记录各个部分的占位符到timeParts
    const regexpSource = inputFormat.replace(/(YYYY|MM|DD|hh|mm|ss)/g,(matched)=>{
        timeParts.push(matched);
        return matched==='YYYY'?'(\\d{4})':'(\\d{2})';
    });
    //通过正则的源码生成正则的实例
    let regexp = new RegExp(regexpSource);
    //用正则表达式匹配当前的字符串，把各个时间部分的值存到各个分组里
    const resultArray = this.match(regexp);
    let groups = resultArray.slice(1);
    //const [,...groups] = this.match(regexp);
    //计算时间部分对象，key是占位符的名称YYYY, 值是对应的时间值 2023
    const dateValues = timeParts.reduce((memo,part,index)=>{
        memo[part]=groups[index];//YYYY=2023
        return memo;
    },{});
    //用实际匹配到的值替换输出的格式字符串，把各个占位符变成实际的值
    return outputFormat.replace(/(YYYY|MM|DD|hh|mm|ss)/g,(matched)=>dateValues[matched]);
}

//定义一个原始的日期格式
let dateStr = '2023#23#05 12@13@15';
debugger
let result = dateStr.format(
    'YYYY#DD#MM hh@mm@ss',
    'YYYY-MM-DD hh:mm:ss'
);
console.log(result);//2023-05-23 12:13:15
